<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
    //    const arr = [1, 2, [3, 4, 5, [6, 7], 8], 9, 10, [11, [12, 13]]]
    //    function A(arr){
    //     return arr.reduce((result,item,val)=>{
    //           return result.concat(Array.isArray(item)?A(item):item)         
    //      },[])
    //    }
    //   let data =  A(arr)
    //   console.log(data)
    // let a = aBc;
    // let arr = a.split("");
    // arr.forEach((item,index)=>{
        //小写
        const reg = /^[a-z]+$/;
        //大写
        // const reg = /^[A-Z]+$/;
    // })
    // function A(arr){
    //     console.log(arr.toString().split(","))
    // }
    // A(arr)
// 数组扁平化
// let arr = [1,2,3,[4,5,6,7,[1,2]]];
// function flatten(data){
//    return data.reduce((result,item)=>{
//         return result.concat(Array.isArray(item)?flatten(item):item)
//    },[])
// }
// let result = flatten(arr)
// console.log(result)
// function flatten(data){
//   return  data.toString().split(",").map(item => {
//       return Number(item)
//   });
// }
// let result = flatten(arr)
// console.log(result)
// function flatten(data){
//     let res = []
//     data.map(item=>{
//         if(Array.isArray(item)){
//             res = res.concat(flatten(item))
//         }else{
//             res.push(item)
//         }
//     })
//     return res
// }
// let result = flatten(arr)
// console.log(result)
// function flatten(arr) {
//     while(arr.some(item=>Array.isArray(item))) {
//         console.log(...arr)
//         arr = [].concat(...arr);
//     }
//     return arr;
// }
// let result = flatten(arr)
// console.log(result)


// 生成SKU
// 已知规格数据
// const spu = 'AB1234567';
// const specList = [ 
//  ["red", "yellow"],
//  ["XL", "S"], 
//  ['a1', 'a2'],
//  ['b1', 'b2'],
// ];
/** 
  输出结果：
 AB1234567-red-XL-a1-b1;
 AB1234567-red-XL-a1-b2;
 AB1234567-red-XL-a2-b1;
 AB1234567-red-XL-a2-b2;
 AB1234567-red-S-a1-b1;
 AB1234567-red-S-a1-b2;
 AB1234567-red-S-a2-b1;
 AB1234567-red-S-a2-b2;
 AB1234567-yellow-XL-a1-b1;
 AB1234567-yellow-XL-a1-b2;
 AB1234567-yellow-XL-a2-b1;
 AB1234567-yellow-XL-a2-b2;
 AB1234567-yellow-S-a1-b1;
 AB1234567-yellow-S-a1-b2;
 AB1234567-yellow-S-a2-b1;
 AB1234567-yellow-S-a2-b2;
  ....
*/
// 请完善如下createSKU函数及注释信息以符合输出结果;
/** 
* @param
* @return 
*/
const spu = 'AB1234567';
const specList = [ 
 ["red", "yellow"],
 ["XL", "S"], 
 ['a1', 'a2'],
 ['b1', 'b2'],
];
function cartesianProductOf() {
    // return Array.prototype.reduce.call(arguments,function(a, b) {
    //     var ret = [];
    //     a.forEach(function(a) {
    //         console.log(a,b)
    //         b.forEach(function(b) {
    //             ret.push(a.concat([b]));
    //         });
    //     });
    //     return ret;
    // }, [[]]);
    let arr = Array.prototype.slice.apply(arguments)
   return arr.reduce((a,b)=>{
        var ret = []
        a.forEach(item => {
            console.log("+",item)
            b.forEach(val=>{
                console.log("-",val)
                ret.push(item.concat(val));
            })
        });
        return ret;
    },[[]])
}
 
let allArr =cartesianProductOf(...specList )
console.log(allArr)

















    </script>
</body>
</html>